package com.shujia.wyh;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.resps.Tuple;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JedisDemo1 {
    public static void main(String[] args) {
        //要与redis数据库建立连接
        //Jedis中有一个带参数的构造方法可以给我们使用
        //  public Jedis(final String host, final int port) {
        //    connection = new Connection(host, port);
        //  }
        Jedis jedis = new Jedis("192.168.254.100", 7000);

        System.out.println("与redis连接建立成功！！" + jedis);

        System.out.println("===========================================");
        /**
         *  String
         *  list
         *  set
         *  zset
         *  hash
         */
        //set name xiaohu
//        String s = jedis.set("name", "小虎");
//        System.out.println(("OK".equals(s)) ? "数据添加成功！" : "数据添加失败！");

        //get name
//        String name = jedis.get("name");
//        System.out.println(name);

        //需求：设置一个验证码，存储到redis，并设置过期时间
//        String s1 = jedis.setex("验证码", 60, "67862");
//        System.out.println(s1);
//
//        //list
//        long l = jedis.lpush("list1", "小黑", "小花", "刘天保");
//        System.out.println(l);

//        List<String> list1 = jedis.lrange("list1", 0, -1);
//        for (String s : list1) {
//            System.out.println(s);
//        }


        //Set数据类型
//        long l = jedis.sadd("set1", "hello", "world", "hadoop", "hello", "world");
//        System.out.println(l);

        //底层是使用Collections工具类中的toSet()方法，toSet方法是实例化了HashSet的集合
//        Set<String> set1 = jedis.smembers("set1");

        //Sort Set
        //Zset
        //long zadd(String key, double score, String member); 传一个值给一个分数
//        long l = jedis.zadd("zset2", 45, "刘天保");
//        System.out.println(l);
//        long l1 = jedis.zadd("zset2", 12, "孔志伟");
//        System.out.println(l1);
//        long l2 = jedis.zadd("zset2", 66, "洪文霁");
//        System.out.println(l2);
        //因为一个一个添加的话效率比较低，所以又一种可以一次性可以传多个值的方法
        //long zadd(String key, Map<String, Double> scoreMembers);
        //先将多个元素以及分数封装成Map集合，然后再一次性添加到redis中
//        HashMap<String, Double> map = new HashMap<>();
//        map.put("小花",76.0);
//        map.put("小黑",47.0);
//        map.put("小白",88.0);
//        jedis.zadd("zset3",map);
//        List<String> zset3 = jedis.zrange("zset3", 0, -1);
//        for (String s : zset3) {
//            System.out.println(s);
//        }
//        List<String> zset1 = jedis.zrangeByScore("zset3", 0, 100);
//        for (String s : zset1) {
//            System.out.println(s);
//        }

//        List<Tuple> zset3 = jedis.zrangeByScoreWithScores("zset3", 0, 100);
//        //Tuple ---> (s1,s2)
//        for (Tuple tuple : zset3) {
//            System.out.println(tuple.getScore()+"---"+tuple.getElement());
//        }

        //Hash数据类型
//        HashMap<String, String> map = new HashMap<>();
//        map.put("姓名","小虎");
//        map.put("年龄","18");
//        map.put("地址","安徽合肥");
//        map.put("公司","数加科技");
//        jedis.hset("xiaohu个人信息",map);

        Map<String, String> map = jedis.hgetAll("xiaohu个人信息");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "--" + value);
        }


        //关闭连接，释放资源
        jedis.close();
    }
}
